package db;

import java.util.List;

import domain.Activity;
import domain.Club;
import web.PaginationSupport;

/**
 * 活动资源库接口
 */
public interface ActivityRepository {

    /**
     * 获取活动的总数
     * @return 活动的数量
     */
    long count();

    /**
     * 获取特定社团中活动的总数
     * @param clubID    社团ID
     * @return  社团中活动的数量
     */
    long countByClubID(int clubID);

    /**
     * 创建一个新的活动
     * @param activity 新活动的信息
     * @return 新创建的活动
     */
    Activity save(Activity activity);

    /**
     * 根据ID查找活动
     * @param activityID 活动的ID
     * @return 对应ID的活动
     */
    Activity findOne(int activityID);

    /**
     * 根据活动名查找活动
     * @param activityName 活动名
     * @return 对应活动名的活动
     */
    Activity findByActivityName(String activityName);

    /**
     * 分页查找活动
     * @param pageNo 页码
     * @param pageSize 每页的数量
     * @return 分页的活动列表
     */
    PaginationSupport<Activity> findPage(int pageNo, int pageSize);

    /**
     * 更新活动
     * @param activity 更新后的活动信息
     * @return 是否更新成功
     */
    boolean updateActivity(Activity activity);

    /**
     * 删除活动
     * @param activityID 活动ID
     * @return 是否删除成功
     */
    boolean deleteActivity(int activityID);

    /**
     * 根据用户查找用户所以活动
     * @param userId 用户ID
     * @return 用户的活动列表
     */
    List<Activity> findActivityByUserId(int userId);

    /**
     * 获取所有活动
     * @return 所有活动的列表
     */
    List<Activity> findAll();

    /**
     * 获取社团中所有活动
     * @param club  社团
     * @return  社团中所有活动
     */
    List<Activity> findActivitiesByClub(Club club);
}
